// pages/games/digital/digital.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    showrule:true,
    level:0,
    levels: ['I','II','III','IV','V','VI'],
    doms:[],
    domWdh:0, //单个blo宽度
    tip:["选好了","good luck!"],//提示文字
    cur_tip: null,//当前提示文字
    disbtn:false, //禁止按钮
    spendtime:0,//游戏用时
    showtimes:false,
    timeid:0, //时间定时器
    findnum:'',//要查找的数字
    allArr:[],//所有待生成的数字，没生成一个便取出一个
    gamestart:false,//游戏开始标志
  },
  siwtchrule(){
    //显示/隐藏 规则
    this.setData({
      showrule:!this.data.showrule
    })
  },
  breakArr(arr){
    //随机打散数组
    for(var i=0;i<arr.length;i++){
      let rnum=(Math.random()*arr.length) | 0;
      let empty=null;
      empty=arr[i];
      arr[i] = arr[rnum];
      arr[rnum]=empty;
    }
    return arr;
  },
  createBlo(lev){
    // 按级别生成方格，0级对应2*2 1对应3*3
    let domLen = Math.pow((+lev + 2), 2);
    
    let query=wx.createSelectorQuery();
    query.select('.dlf').boundingClientRect(dt=>{
      // width-rows*2 因为要减去边框线的宽度
      let rows=+lev+2;//一行显示的数量
      let wdh = ((dt.width-rows*2) / rows).toFixed(2);
      this.setData({
        domWdh:wdh
      })
    }).exec();
    let arr=[];
    for(var i=1;i<=domLen;i++){
      arr.push({
        val:i,
        showit:true
      });
    }
    let _arr=this.breakArr(arr);
    this.setData({
      doms: _arr,
      cur_tip:this.data.tip[0]
    })
  } ,
  createAllArr(){
    //生成所有带查找的数字
    let max=Math.pow((this.data.level+2),2);//最大数字
    let allArr=[]; //所有待生成的数字，没生成一个便取出一个
    for(var i=1;i<=max;i++){
      allArr.push(i);
    }
    this.setData({allArr:allArr});
  },
  createRandNum(){
    // 生成要查找的数
    let max = this.data.allArr.length;
    let rand=Math.floor(Math.random()*max);
    return this.data.allArr.splice(rand,1);
  },
  startCalcTime(){
    // 游戏用时
    if(this.data.timeid){
      clearInterval(this.data.timeid);
      this.setData({timeid:null});
    }
    let sid = setInterval(() => {
      let curtime = this.data.spendtime;
      curtime += 1;
      this.setData({
        spendtime: curtime
      })
    }, 1000)
    this.setData({ timeid: sid });
  },
  openblo(li){
    // 确定查找结果
    if(!this.data.gamestart) return;
    let tar=li.currentTarget.dataset.val;
    let rlt=this.findItem(tar);
    let thkey = 'doms[' + rlt + '].showit';
    this.setData({
      [thkey]: 'true'
    })
    if (this.data.findnum!==this.data.doms[rlt].val){
      // 如果找错了
      wx.showModal({
        title: '',
        content:'oh no！找错了哦,再来一次吧',
        showCancel:true,
        cancelText:'不玩了',
        confirmText:'再来',
        success:res=>{
          if(res.confirm){
            // 点击了确定
            this.restart();//重新开始
          }else{
            // 不玩了
           this.backIndex();
          }
        }
      })
    }else{
      // 找到了
      console.log(this.data.allArr)
      if(!this.data.allArr.length){
        // allArr是还没有被查找过的数组，如果该数组length==0 证明玩家已正确找到所有数字
        //进入下一关
        if (this.data.level == 5) {
          // 通关，游戏当前共6级
          wx.showModal({
            title: '通关警告',
            showCancel:false,
            content: '您太厉害了,再来试试我们别的游戏吧！',
            success:res=>{
                this.backIndex();
            }
          })
          return;
        }
        wx.showModal({
          title: '',
          content: 'wow!这么棒的嘛,进下一关试试？',
          cancelText:'我怂了',
          confirmText: '来呀',
          success:res=>{
            console.log(res);
            if(res.confirm){
              // 继续
              let curlevel=this.data.level;
              curlevel++;
              this.setData({
                level: curlevel
                });
              this.restart();
              
            }else{
              this.backIndex();
            }
          },

        })
        
        
      }
      let cur = this.createRandNum()[0];
      this.setData({ findnum: cur });
    }
    
  },
  findItem(val){
    //查找指定项的下标
    let _doms=this.data.doms;
    for(var i=0;i<_doms.length;i++){
      if(val==_doms[i].val){
        return i;
      }
    }
  },
  hideAllDigital(){
    //隐藏所有数字
    let doms = this.data.doms;
    let news=doms.map(obj=>{
      return {
        val:obj.val,
        showit:false
      }
    })
    this.setData({doms:news});
  },
  start(){
    // 开始查找
    this.hideAllDigital();
    this.setData({
      cur_tip:this.data.tip[1],
      disbtn:true,
      showtimes:true,
      gamestart:true,
      spendtime:0,
    })
    //生成所有带查找数字数组
    this.createAllArr();
    // 获取当前要查找的数字
    let cur=this.createRandNum()[0];
    this.setData({findnum:cur});
    this.startCalcTime();//开始计时
  },
  backIndex(){
    //返回首页
    wx.navigateTo({
      url: '../../index/index',
    })
  },
  test(){
    // 测试某个功能,完删
   
    wx.showModal({
      title: '',
      content: 'wow!!这么棒的嘛,进下一关试试？',
      cancelText: '我怂了',
      confirmText: '来呀',
      success:res=>{
        console.log(res);
      }
    })
  },
  pause(){
    clearInterval(this.data.timeid);
    this.setData({ timeid: null });
  },
  restart(){
    // 复位游戏
    this.setData({
      cur_tip: this.data.tip[0],
      disbtn: false,
      showtimes: false,
      gamestart: false,
    });
    this.createBlo(this.data.level);//生成dom
    //生成所有带查找数字数组
    this.createAllArr();
    // 获取当前要查找的数字
    let cur = this.createRandNum()[0];
    this.setData({ findnum: cur });
    this.startCalcTime();//开始计时
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    this.createBlo(this.data.level);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    this.startCalcTime();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    //清除计时器
  
    clearInterval(this.data.timeid);
    this.setData({timeid:null});
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})